/*
 * File:   Agent31.h
 * Author: root
 *
 * Created on November 16, 2008, 8:00 PM
 */

#include "Player.h"
#include "KnockingStrategy.h"
#include "DrawingStrategy.h"
#include "DiscardStrategy.h"

#ifndef _AGENT31_H
#define	_AGENT31_H

class Agent31 : public Player {

    KnockingStrategy* knockingStrategy;
    DrawingStrategy* drawingStrategy;
    DiscardStrategy* discardStrategy;
    DrawingStrategy* endDrawingStrategy;
    DiscardStrategy* endDiscardStrategy;

public:

    Agent31(int tableOrder,
            KnockingStrategy* myKnockingStrategy, 
            DrawingStrategy* myDrawingStrategy,
            DiscardStrategy* myDiscardStrategy, 
            DrawingStrategy* myEndDrawingStrategy,
            DiscardStrategy* myEndDiscardStrategy)
    : Player(tableOrder)
    {
        knockingStrategy = myKnockingStrategy;
        drawingStrategy = myDrawingStrategy;
        discardStrategy = myDiscardStrategy;
        endDrawingStrategy = myEndDrawingStrategy;
        endDiscardStrategy = myEndDiscardStrategy;
    }

    virtual Move decideMove();
    virtual Move decideMove(GameState*);
    virtual void opponentMove(int, const Move&);
    
    virtual ~Agent31() {
      delete knockingStrategy;
      delete drawingStrategy;
      delete discardStrategy;
      delete endDrawingStrategy;
      delete endDiscardStrategy;
    }

};

#endif	/* _AGENT31_H */

